package com.biz.primus.ms.promotion.service.promotion;

import com.biz.primus.base.vo.ProductPromotionTagRespVo;
import com.biz.primus.base.vo.ProductSpecialOfferPromotionRespVo;
import com.biz.primus.base.vo.PromotionBasicInfoVo;
import com.biz.primus.model.promotion.vo.req.*;
import com.biz.primus.model.promotion.vo.resp.*;
import java.util.List;

/**
 * 促销Service
 *
 * @author david-liu
 */
public interface PromotionService {
    /**
     * 获取订单商品种生效的促销信息
     *
     * @param reqVo 请求Vo
     * @return 生效的促销信息
     */
    OrderPromotionRespVo getPromotion4Order(OrderPromotionReqVo reqVo);

    /**
     * 获取商品的简单特价促销信息
     *
     * @param reqVo 请求Vo
     * @return 简单特价促销信息
     */
    ProductSpecialOfferPromotionRespVo getProductSpecialOfferPromotion(SingleProductSpecialOfferPriceReqVo reqVo);

    /**
     * 获取商品的简单特价促销信息
     *
     * @param reqVo 请求Vo
     * @return 商品加单特价促销信息集合
     */
    List<ProductSpecialOfferPromotionRespVo> getProductSpecialOfferPromotion(MultiProductSpecialOfferPriceReqVo reqVo);

    /**
     * 获取商品促销标签信息
     *
     * @param reqVo 请求Vo
     * @return 商品促销标签信息
     */
    List<ProductPromotionTagRespVo> getProductPromotionTags(ProductPromotionTagReqVo reqVo);

    /**
     * 获取签到评价有礼促销信息
     *
     * @param reqVo 请求Vo
     * @return 签到评价有礼促销信息
     */
    PromotionBasicInfoVo getMemberMatchedSignaturePromotion(com.biz.primus.model.promotion.vo.req.SignaturePromotionReqVo reqVo);

    /**
     * 获取下单有礼促销信息
     *
     * @param reqVo 下单有礼促销信息请求Vo
     * @return 下单有礼促销信息
     */
    List<PromotionBasicInfoVo> getOrderMatchedLuckyOrderPromotion(OrderPromotionReqVo reqVo);

    /**
     * 生效用户的促销
     *
     * @param reqVo 请求Vo
     */
    Boolean takeMemberPromotions(TakeMemberPromotionReqVo reqVo);

    /**
     * 生效用户签到/有礼评价
     *
     * @param reqVo 请求Vo
     * @return boolean
     */
    Boolean takeMemberSignaturePromotion(TakeMemberSignaturePromotionReqVo reqVo);

    /**
     * 获取商品促销信息
     *
     * @param reqVo 请求Vo
     * @return 商品促销信息
     */
    List<PromotionBasicInfoVo> getProductPromotions(ProductPromotionReqVo reqVo);

    /**
     * 获取秒杀活动信息
     *
     * @param reqVo 请求Vo
     * @return 秒杀活动信息
     */
    List<SeckillPromotionRespVo> getSeckillPromotion(SeckillPromotionReqVo reqVo);

    /**
     * 获取秒杀商品详情
     *
     * @param reqVo 请求Vo
     * @return 秒杀商品详情
     */
    SeckillProductRespVo getSeckillProduct(SeckillProductReqVo reqVo);

    /**
     * 扣减秒杀商品库存
     *
     * @param reqVo 请求Vo
     * @return boolean
     */
    Boolean changeSeckillProductStock(ChangeSeckillProductStockReqVo reqVo);

    /**
     * 扣减预售商品库存
     *
     * @param reqVo 请求Vo
     * @return boolean
     */
    Boolean changePresellProductStock(ChangePresellProductStockReqVo reqVo);

    /**
     * 获取预售活动信息
     *
     * @param reqVo 请求Vo
     * @return 预售活动信息
     */
    List<PresellPromotionRespVo> getPresellPromotion(PresellPromotionReqVo reqVo);

    /**
     * 获取预售商品详情
     *
     * @param reqVo 请求Vo
     * @return 预售商品详情
     */
    PresellProductRespVo getPresellProduct(PresellProductReqVo reqVo);
}
